【发布时间】:2016-03-01 14:59:53
【问题描述】:
我写了一个代码,如下所示。 在这里,我有一个选项卡式面板,我在其中添加更多带有“+”(添加选项卡符号)的选项卡,例如框架右侧的 gChrome。我在框架的左侧有另一个固定面板,它由一些按钮组成。 我的查询:
1. 现在我想通过使用另一个面板中的按钮操作将一些组件添加到特定的选项卡式面板(面板 1 或面板 2 ..)中。我怎样才能做到这一点。之后,我需要将每个选项卡式面板的所有组件列表保存在脚本中。 请有任何建议。
2. 如果您运行代码,您可以在输出中看到右侧选项卡式面板的尺寸非常窄,可能是因为使用了 BorderLayout.LINE_END。如果我扩展我的 GUI,面板保持相同的大小。 我想固定标签面板的窄尺寸,我希望标签面板的尺寸也会随着 Frame 的增加而增加。
谢谢。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class TestTabSelection extends JFrame {
public JTabbedPane tab = new JTabbedPane();
public JPanel editPanel = new JPanel();
private JButton MM, CM, AAA, VO;
public TestTabSelection() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JPanel panel1 = new JPanel();
panel1.setSize(600, 550);
JPanel createAll = new JPanel();
createAll.setLayout(new BorderLayout());
createAll.BorderLayout.LINE_END;
tab.addTab("CreateAll", createAll);
tab.addTab("Slice 1", panel1);
tab.addTab("+", new JPanel());
tab.getModel().addChangeListener(new ChangeListener() {
private int lastSelected;
private boolean ignore = false;
@Override
public void stateChanged(ChangeEvent e) {
if (!ignore) {
ignore = true;
try {
int selected = tab.getSelectedIndex();
String title = tab.getTitleAt(selected);
if ("+".equals(title)) {
JPanel pane = CreateSlice();
tab.insertTab("Slice "
+ (tab.getTabCount()), null, pane,
null, lastSelected + selected);
tab.setSelectedComponent(pane);
} else {
lastSelected = selected;
}
} finally {
ignore = false;
}
}
}
});
final JButton btn = new JButton("Add");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(tab.getTabCount());
}
});
JFrame frame = new JFrame("Testing");
frame.setTitle("Network Slice Creation");
frame.setSize(1000, 700);
frame.setBackground(Color.gray);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createPanel0();
frame.add(editPanel, BorderLayout.LINE_START);
frame.add(tab,BorderLayout.LINE_END);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
private void createPanel0() {
editPanel = new JPanel(null);
editPanel.setPreferredSize(new Dimension(330, 650));
editPanel.setBorder(BorderFactory.createLineBorder(Color.gray));
editPanel.setBorder(BorderFactory
.createTitledBorder("Netowrk Functions"));
// editPanel.setLayout(new BorderLayout());
// FunctionHandler handler = new FunctionHandler();
MM = new JButton("MM");
MM.setBounds(50, 80, 150, 40);
MM.setVisible(true);
// MM.addActionListener(handler);
AAA = new JButton("AAA");
AAA.setBounds(50, 160, 150, 40);
AAA.setVisible(true);
// AAA.addActionListener(handler);
CM = new JButton("CM");
CM.setBounds(50, 240, 150, 40);
CM.setVisible(true);
// CM.addActionListener(handler);
VO = new JButton("VO");
VO.setBounds(50, 320, 150, 40);
VO.setVisible(true);
/* VO.addActionListener(handler); */
editPanel.add(MM);
editPanel.add(AAA);
editPanel.add(CM);
editPanel.add(VO);
}
public JPanel CreateSlice() {
JPanel pane = new JPanel(null);
pane.setPreferredSize(new Dimension(550, 600));
return pane;
}
public static void main(String[] args) {
new TestTabSelection();
}
}
【问题讨论】:
-
你的第二个假设是正确的,你需要使用不同的布局管理器
-
如果我扩展我的框架以便右侧面板也将与框架一起扩展,哪种布局更好?@MadProgrammer
-
@MadProgrammer,你能告诉我关于第一点的任何想法吗?我希望能得到你的想法。我可以将 ChangeListener 用于选项卡,但我需要排除“+”选项卡选择,我尝试过但无法成功。
-
最好的布局是满足您需求的布局,也许可以尝试使用
GridBagLayout -
感谢@MadProgrammer,它有效。
标签: java swing user-interface awt jtabbedpane