请问jbuilder7中有没有像VC中的group box的控件 没有. 用JPanel加上Border就行了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1)简单些public class Compement_Titleborder_study2 extends JFrame { public Compement_Titleborder_study2() { super("Compement_Titleborder_study2"); JCheckBox title = new JCheckBox("Title"); title.setSelected(true); /*p1.setEnabled(false);//可用这句来完成:初始为disable */ final CompTitledPane p1 = new CompTitledPane(title); title.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { p1.setEnabled(e.getStateChange() == ItemEvent.SELECTED); } }); APanel p2 = new APanel(); p1.setTransmittingAllowed(true);//??? p1.setTransmitter(p2); p1.getContentPane().add(p2); getContentPane().add(p1, BorderLayout.CENTER); } class APanel extends JPanel implements StateTransmitter { JButton button; JTextField textField; APanel() { button = new JButton("abc"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Ouch!"); } }); textField = new JTextField(10); textField.setText("text"); add(button , BorderLayout.NORTH); add(textField, BorderLayout.SOUTH); } public void setChildrenEnabled(boolean enable) { button.setEnabled(enable); textField.setEnabled(enable); } } public static void main (String args[]) { Compement_Titleborder_study2 frame = new Compement_Titleborder_study2(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setSize(280, 110); frame.setVisible(true); }} 2)复杂些package swing_super_example_border;/** * <p>Title: Swing_Super_Example</p> * <p>Description: Swing_Example是网上下载的例子。</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * @author unascribed * @version 1.0 */import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;//一般自己更改的地方仅是frame中的SwitchPanel//----------------------------自己定义的frame-------------------------------public class Compement_Titleborder_study extends JFrame { String title = "<html>Title ("+ "<font color=\"#ffffff\"><i>JLabel</i></font>"+ ")"; public Compement_Titleborder_study() { super("Compement_Titleborder_study"); JLabel titleLabel = new JLabel(title); CompTitledPane p1 = new CompTitledPane(titleLabel);// JPanel p = p1.getContentPane(); p.setLayout(new BorderLayout()); p.add(new SwitchPanel(p1), BorderLayout.CENTER);// getContentPane().add(p1, BorderLayout.CENTER); } class SwitchPanel extends JPanel implements ActionListener { String[] posStr = {"", "ABOVE_TOP" , "TOP" , "BELOW_TOP" , "ABOVE_BOTTOM", "BOTTOM", "BELOW_BOTTOM"}; String[] jusStr = {"", "LEFT" , "CENTER", "RIGHT"}; TitledBorder border;//TitledBorder是个类 CompTitledPane panel; SwitchPanel(CompTitledPane panel) { this.panel = panel; this.border = (TitledBorder)panel.getBorder(); add(createPanel("Position" ,posStr, 2)); add(createPanel("Justification",jusStr, 1)); } JPanel createPanel(String str, String[] strs, int selectPos) {//selectPos是默认选中项 JPanel p = new JPanel(); p.setLayout(new GridLayout(strs.length, 1)); p.add(new JLabel(str)); ButtonGroup g = new ButtonGroup(); for (int i=1;i<strs.length;i++) { JRadioButton b = new JRadioButton(strs[i]); if (i == selectPos) { b.setSelected(true); } p.add( b ); g.add( b ); b.addActionListener(this); } return p; } public void actionPerformed(ActionEvent e) { JRadioButton b = (JRadioButton)e.getSource(); String label = b.getText(); for (int i=1; i<posStr.length; i++) { if (label.equals(posStr[i])) {//判断标题是否相同 border.setTitlePosition(i);//数组的顺序是固定的,不可颠倒。 panel.revalidate();//重绘 panel.repaint(); return; } } for (int i=1; i<jusStr.length; i++) { if (label.equals(jusStr[i])) { border.setTitleJustification(i); panel.revalidate(); panel.repaint(); return; } } } } public static void main (String args[]) { Compement_Titleborder_study frame = new Compement_Titleborder_study(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setSize(280, 230); frame.setVisible(true); }}//关键是下面三个类//---------------------------处理标题---------------------------class CompTitledPane extends JPanel { protected CompTitledBorder border; protected JComponent component; protected JPanel panel; protected boolean transmittingAllowed; protected StateTransmitter transmitter; public CompTitledPane() { this(new JLabel("Title")); // debug // JLabel label = (JLabel)getTitleComponent(); // label.setOpaque(true); // label.setBackground(Color.yellow); } public CompTitledPane(JComponent component) {//将标题控件传入 this.component = component; border = new CompTitledBorder(component); setBorder(border); panel = new JPanel(); setLayout(null); add(component); add(panel); transmittingAllowed = false; transmitter = null; } public JComponent getTitleComponent() {//标题控件 return component; } public void setTitleComponent(JComponent newComponent) {//设置新的标题控件 remove(component); add(newComponent); border.setTitleComponent(newComponent); component = newComponent; } public JPanel getContentPane() { return panel; } public void doLayout() { Insets insets = getInsets();//容器边的代表 Rectangle rect = getBounds();//矩形区域 rect.x = 0; rect.y = 0; Rectangle compR = border.getComponentRect(rect,insets); component.setBounds(compR); rect.x += insets.left; rect.y += insets.top; rect.width -= insets.left + insets.right; rect.height -= insets.top + insets.bottom; panel.setBounds(rect); } public void setTransmittingAllowed(boolean enable) {//允许部件被disable transmittingAllowed = enable; } public boolean getTransmittingAllowed() { return transmittingAllowed; } public void setTransmitter(StateTransmitter transmitter) { this.transmitter = transmitter; } public StateTransmitter getTransmitter() { return transmitter; } public void setEnabled(boolean enable) { super.setEnabled(enable); if (transmittingAllowed && transmitter != null) { transmitter.setChildrenEnabled(enable); } }}//-----------------------------接口定义------------------------- interface StateTransmitter { public void setChildrenEnabled(boolean enable);}// sample//// public void setChildrenEnabled(boolean enable) {//// Component[] children = panel.getComponents();// for(int i=0; i<children.length; i++) {// System.out.println(" " + i +// " " + children[i].getClass().getName() +// " " + enable);// children[i].setEnabled(enable);// }// }// //-------------------------------边框设置----------------------- class CompTitledBorder extends TitledBorder { protected JComponent component; public CompTitledBorder(JComponent component) { this(null, component, LEFT, TOP); } public CompTitledBorder(Border border) { this(border, null, LEFT, TOP); } public CompTitledBorder(Border border, JComponent component) { this(border, component, LEFT, TOP); } public CompTitledBorder(Border border, JComponent component, int titleJustification, int titlePosition) { super(border, null, titleJustification, titlePosition, null, null); this.component = component; if (border == null) { this.border = super.getBorder(); } } public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { Rectangle borderR = new Rectangle(x + EDGE_SPACING, y + EDGE_SPACING, width - (EDGE_SPACING * 2), height - (EDGE_SPACING * 2)); Insets borderInsets; if (border != null) { borderInsets = border.getBorderInsets(c); } else { borderInsets = new Insets(0, 0, 0, 0); } Rectangle rect = new Rectangle(x,y,width,height); Insets insets = getBorderInsets(c); Rectangle compR = getComponentRect(rect, insets); int diff; switch (titlePosition) { case ABOVE_TOP: diff = compR.height + TEXT_SPACING; borderR.y += diff; borderR.height -= diff; break; case TOP: case DEFAULT_POSITION: diff = insets.top/2 - borderInsets.top - EDGE_SPACING; borderR.y += diff; borderR.height -= diff; break; case BELOW_TOP: case ABOVE_BOTTOM: break; case BOTTOM: diff = insets.bottom/2 - borderInsets.bottom - EDGE_SPACING; borderR.height -= diff; break; case BELOW_BOTTOM: diff = compR.height + TEXT_SPACING; borderR.height -= diff; break; } border.paintBorder(c, g, borderR.x, borderR.y, borderR.width, borderR.height); Color col = g.getColor(); g.setColor(c.getBackground()); g.fillRect(compR.x, compR.y, compR.width, compR.height); g.setColor(col); component.repaint(); } public Insets getBorderInsets(Component c, Insets insets) { Insets borderInsets; if (border != null) { borderInsets = border.getBorderInsets(c); } else { borderInsets = new Insets(0,0,0,0); } insets.top = EDGE_SPACING + TEXT_SPACING + borderInsets.top; insets.right = EDGE_SPACING + TEXT_SPACING + borderInsets.right; insets.bottom = EDGE_SPACING + TEXT_SPACING + borderInsets.bottom; insets.left = EDGE_SPACING + TEXT_SPACING + borderInsets.left; if (c == null || component == null) { return insets; } int compHeight = 0; if (component != null) { compHeight = component.getPreferredSize().height; } switch (titlePosition) { case ABOVE_TOP: insets.top += compHeight + TEXT_SPACING; break; case TOP: case DEFAULT_POSITION: insets.top += Math.max(compHeight,borderInsets.top) - borderInsets.top; break; case BELOW_TOP: insets.top += compHeight + TEXT_SPACING; break; case ABOVE_BOTTOM: insets.bottom += compHeight + TEXT_SPACING; break; case BOTTOM: insets.bottom += Math.max(compHeight,borderInsets.bottom) - borderInsets.bottom; break; case BELOW_BOTTOM: insets.bottom += compHeight + TEXT_SPACING; break; } return insets; } public JComponent getTitleComponent() { return component; } public void setTitleComponent(JComponent component) { this.component = component; }//得到边框的矩形区域 public Rectangle getComponentRect(Rectangle rect,Insets borderInsets) {//矩形区域和边线传入 Dimension compD = component.getPreferredSize();//获取标题的大小 Rectangle compR = new Rectangle(0,0,compD.width,compD.height);//创建矩形区域 switch (titlePosition) {//垂直判断 case ABOVE_TOP: compR.y = EDGE_SPACING; break; case TOP: case DEFAULT_POSITION: compR.y = EDGE_SPACING + (borderInsets.top -EDGE_SPACING -TEXT_SPACING -compD.height)/2; break; case BELOW_TOP: compR.y = borderInsets.top - compD.height - TEXT_SPACING; break; case ABOVE_BOTTOM: compR.y = rect.height - borderInsets.bottom + TEXT_SPACING; break; case BOTTOM: compR.y = rect.height - borderInsets.bottom + TEXT_SPACING + (borderInsets.bottom -EDGE_SPACING -TEXT_SPACING -compD.height)/2; break; case BELOW_BOTTOM: compR.y = rect.height - compD.height - EDGE_SPACING; break; } switch (titleJustification) {//水平判断 case LEFT: case DEFAULT_JUSTIFICATION: compR.x = TEXT_INSET_H + borderInsets.left; break; case RIGHT: compR.x = rect.width - borderInsets.right -TEXT_INSET_H -compR.width; break; case CENTER: compR.x = (rect.width - compR.width) / 2; break; } return compR; }}//------------------------------------------------------ MVC的3种架构模式 一个很简单的问题 为什么这里是非法向前引用 一个简单问题 初学Java有些地方不明白,还望哥哥们指教....谢谢各位进来一阅..MM这厢有礼啦~ j2sdk1.4.2_05国内有没有下载的?知道的给个地址 关于用java来处理license的问题 java如何实现excel功能 JSP中可以使用接口吗? 求助!在那里能下载关于使用JBUILD的书!!!! RuntimeException 能不能被捕获? 文件中各字段通过tab(ASCII 值为09)键分隔,如何解析。
public class Compement_Titleborder_study2 extends JFrame { public Compement_Titleborder_study2() {
super("Compement_Titleborder_study2");
JCheckBox title = new JCheckBox("Title");
title.setSelected(true);
/*p1.setEnabled(false);//可用这句来完成:初始为disable
*/
final CompTitledPane p1 = new CompTitledPane(title);
title.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
p1.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
}
});
APanel p2 = new APanel();
p1.setTransmittingAllowed(true);//???
p1.setTransmitter(p2);
p1.getContentPane().add(p2);
getContentPane().add(p1, BorderLayout.CENTER);
} class APanel extends JPanel implements StateTransmitter {
JButton button;
JTextField textField; APanel() {
button = new JButton("abc");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Ouch!");
}
});
textField = new JTextField(10);
textField.setText("text");
add(button , BorderLayout.NORTH);
add(textField, BorderLayout.SOUTH);
} public void setChildrenEnabled(boolean enable) {
button.setEnabled(enable);
textField.setEnabled(enable);
}
}
public static void main (String args[]) {
Compement_Titleborder_study2 frame = new Compement_Titleborder_study2();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(280, 110);
frame.setVisible(true);
}
}
package swing_super_example_border;/**
* <p>Title: Swing_Super_Example</p>
* <p>Description: Swing_Example是网上下载的例子。</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;//一般自己更改的地方仅是frame中的SwitchPanel
//----------------------------自己定义的frame-------------------------------
public class Compement_Titleborder_study extends JFrame { String title = "<html>Title ("+ "<font color=\"#ffffff\"><i>JLabel</i></font>"+ ")"; public Compement_Titleborder_study() {
super("Compement_Titleborder_study");
JLabel titleLabel = new JLabel(title);
CompTitledPane p1 = new CompTitledPane(titleLabel);//
JPanel p = p1.getContentPane();
p.setLayout(new BorderLayout());
p.add(new SwitchPanel(p1), BorderLayout.CENTER);//
getContentPane().add(p1, BorderLayout.CENTER);
} class SwitchPanel extends JPanel implements ActionListener {
String[] posStr = {"", "ABOVE_TOP" , "TOP" , "BELOW_TOP"
, "ABOVE_BOTTOM", "BOTTOM", "BELOW_BOTTOM"};
String[] jusStr = {"", "LEFT" , "CENTER", "RIGHT"};
TitledBorder border;//TitledBorder是个类
CompTitledPane panel; SwitchPanel(CompTitledPane panel) {
this.panel = panel;
this.border = (TitledBorder)panel.getBorder();
add(createPanel("Position" ,posStr, 2));
add(createPanel("Justification",jusStr, 1));
} JPanel createPanel(String str, String[] strs, int selectPos) {//selectPos是默认选中项
JPanel p = new JPanel();
p.setLayout(new GridLayout(strs.length, 1));
p.add(new JLabel(str));
ButtonGroup g = new ButtonGroup();
for (int i=1;i<strs.length;i++) {
JRadioButton b = new JRadioButton(strs[i]);
if (i == selectPos) {
b.setSelected(true);
}
p.add( b );
g.add( b );
b.addActionListener(this);
}
return p;
} public void actionPerformed(ActionEvent e) {
JRadioButton b = (JRadioButton)e.getSource();
String label = b.getText();
for (int i=1; i<posStr.length; i++) {
if (label.equals(posStr[i])) {//判断标题是否相同
border.setTitlePosition(i);//数组的顺序是固定的,不可颠倒。
panel.revalidate();//重绘
panel.repaint();
return;
}
}
for (int i=1; i<jusStr.length; i++) {
if (label.equals(jusStr[i])) {
border.setTitleJustification(i);
panel.revalidate();
panel.repaint();
return;
}
}
}
}
public static void main (String args[]) {
Compement_Titleborder_study frame = new Compement_Titleborder_study();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(280, 230);
frame.setVisible(true);
}
}//关键是下面三个类
//---------------------------处理标题---------------------------class CompTitledPane extends JPanel {
protected CompTitledBorder border;
protected JComponent component;
protected JPanel panel;
protected boolean transmittingAllowed;
protected StateTransmitter transmitter; public CompTitledPane() {
this(new JLabel("Title"));
// debug
// JLabel label = (JLabel)getTitleComponent();
// label.setOpaque(true);
// label.setBackground(Color.yellow);
} public CompTitledPane(JComponent component) {//将标题控件传入
this.component = component;
border = new CompTitledBorder(component);
setBorder(border);
panel = new JPanel();
setLayout(null);
add(component);
add(panel);
transmittingAllowed = false;
transmitter = null;
} public JComponent getTitleComponent() {//标题控件
return component;
} public void setTitleComponent(JComponent newComponent) {//设置新的标题控件
remove(component);
add(newComponent);
border.setTitleComponent(newComponent);
component = newComponent;
} public JPanel getContentPane() {
return panel;
} public void doLayout() {
Insets insets = getInsets();//容器边的代表
Rectangle rect = getBounds();//矩形区域
rect.x = 0;
rect.y = 0; Rectangle compR = border.getComponentRect(rect,insets);
component.setBounds(compR);
rect.x += insets.left;
rect.y += insets.top;
rect.width -= insets.left + insets.right;
rect.height -= insets.top + insets.bottom;
panel.setBounds(rect);
} public void setTransmittingAllowed(boolean enable) {//允许部件被disable
transmittingAllowed = enable;
}
public boolean getTransmittingAllowed() {
return transmittingAllowed;
} public void setTransmitter(StateTransmitter transmitter) {
this.transmitter = transmitter;
} public StateTransmitter getTransmitter() {
return transmitter;
} public void setEnabled(boolean enable) {
super.setEnabled(enable);
if (transmittingAllowed && transmitter != null) {
transmitter.setChildrenEnabled(enable);
}
}
}
//-----------------------------接口定义------------------------- interface StateTransmitter { public void setChildrenEnabled(boolean enable);}// sample
//
// public void setChildrenEnabled(boolean enable) {
//
// Component[] children = panel.getComponents();
// for(int i=0; i<children.length; i++) {
// System.out.println(" " + i +
// " " + children[i].getClass().getName() +
// " " + enable);
// children[i].setEnabled(enable);
// }
// }
//
protected JComponent component; public CompTitledBorder(JComponent component) {
this(null, component, LEFT, TOP);
} public CompTitledBorder(Border border) {
this(border, null, LEFT, TOP);
} public CompTitledBorder(Border border, JComponent component) {
this(border, component, LEFT, TOP);
} public CompTitledBorder(Border border,
JComponent component,
int titleJustification,
int titlePosition) {
super(border, null, titleJustification,
titlePosition, null, null);
this.component = component;
if (border == null) {
this.border = super.getBorder();
}
}
public void paintBorder(Component c, Graphics g,
int x, int y, int width, int height) {
Rectangle borderR = new Rectangle(x + EDGE_SPACING,
y + EDGE_SPACING,
width - (EDGE_SPACING * 2),
height - (EDGE_SPACING * 2));
Insets borderInsets;
if (border != null) {
borderInsets = border.getBorderInsets(c);
} else {
borderInsets = new Insets(0, 0, 0, 0);
} Rectangle rect = new Rectangle(x,y,width,height);
Insets insets = getBorderInsets(c);
Rectangle compR = getComponentRect(rect, insets);
int diff;
switch (titlePosition) {
case ABOVE_TOP:
diff = compR.height + TEXT_SPACING;
borderR.y += diff;
borderR.height -= diff;
break;
case TOP:
case DEFAULT_POSITION:
diff = insets.top/2 - borderInsets.top - EDGE_SPACING;
borderR.y += diff;
borderR.height -= diff;
break;
case BELOW_TOP:
case ABOVE_BOTTOM:
break;
case BOTTOM:
diff = insets.bottom/2 - borderInsets.bottom - EDGE_SPACING;
borderR.height -= diff;
break;
case BELOW_BOTTOM:
diff = compR.height + TEXT_SPACING;
borderR.height -= diff;
break;
}
border.paintBorder(c, g, borderR.x, borderR.y,
borderR.width, borderR.height);
Color col = g.getColor();
g.setColor(c.getBackground());
g.fillRect(compR.x, compR.y, compR.width, compR.height);
g.setColor(col);
component.repaint();
} public Insets getBorderInsets(Component c, Insets insets) {
Insets borderInsets;
if (border != null) {
borderInsets = border.getBorderInsets(c);
} else {
borderInsets = new Insets(0,0,0,0);
}
insets.top = EDGE_SPACING + TEXT_SPACING + borderInsets.top;
insets.right = EDGE_SPACING + TEXT_SPACING + borderInsets.right;
insets.bottom = EDGE_SPACING + TEXT_SPACING + borderInsets.bottom;
insets.left = EDGE_SPACING + TEXT_SPACING + borderInsets.left; if (c == null || component == null) {
return insets;
} int compHeight = 0;
if (component != null) {
compHeight = component.getPreferredSize().height;
} switch (titlePosition) {
case ABOVE_TOP:
insets.top += compHeight + TEXT_SPACING;
break;
case TOP:
case DEFAULT_POSITION:
insets.top += Math.max(compHeight,borderInsets.top) - borderInsets.top;
break;
case BELOW_TOP:
insets.top += compHeight + TEXT_SPACING;
break;
case ABOVE_BOTTOM:
insets.bottom += compHeight + TEXT_SPACING;
break;
case BOTTOM:
insets.bottom += Math.max(compHeight,borderInsets.bottom) - borderInsets.bottom;
break;
case BELOW_BOTTOM:
insets.bottom += compHeight + TEXT_SPACING;
break;
}
return insets;
} public JComponent getTitleComponent() {
return component;
} public void setTitleComponent(JComponent component) {
this.component = component;
}//得到边框的矩形区域
public Rectangle getComponentRect(Rectangle rect,Insets borderInsets) {//矩形区域和边线传入
Dimension compD = component.getPreferredSize();//获取标题的大小
Rectangle compR = new Rectangle(0,0,compD.width,compD.height);//创建矩形区域
switch (titlePosition) {//垂直判断
case ABOVE_TOP:
compR.y = EDGE_SPACING;
break;
case TOP:
case DEFAULT_POSITION:
compR.y = EDGE_SPACING +
(borderInsets.top -EDGE_SPACING -TEXT_SPACING -compD.height)/2;
break;
case BELOW_TOP:
compR.y = borderInsets.top - compD.height - TEXT_SPACING;
break;
case ABOVE_BOTTOM:
compR.y = rect.height - borderInsets.bottom + TEXT_SPACING;
break;
case BOTTOM:
compR.y = rect.height - borderInsets.bottom + TEXT_SPACING +
(borderInsets.bottom -EDGE_SPACING -TEXT_SPACING -compD.height)/2;
break;
case BELOW_BOTTOM:
compR.y = rect.height - compD.height - EDGE_SPACING;
break;
}
switch (titleJustification) {//水平判断
case LEFT:
case DEFAULT_JUSTIFICATION:
compR.x = TEXT_INSET_H + borderInsets.left;
break;
case RIGHT:
compR.x = rect.width - borderInsets.right -TEXT_INSET_H -compR.width;
break;
case CENTER:
compR.x = (rect.width - compR.width) / 2;
break;
}
return compR;
}}
//------------------------------------------------------