我已经编写了一个代码,如下所示。 在这里,我有一个标签式面板,我在框架的右侧添加了更多带有' +'(添加标签符号)的标签,如gChrome。我在Frame的左侧有另一个固定面板,它由一些按钮组成。 我的问题:
1。现在,我想通过使用其他Panel中的Button Action将一些组件添加到特定选项卡式面板(面板1或面板2 ..)中。我怎样才能做到这一点。之后,我需要在脚本中保存每个选项卡式面板的所有组件列表。 有任何建议请。
2. 如果您运行代码,则可以在输出中看到右侧选项卡式面板的大小非常窄,可能是使用BorderLayout.LINE_END。如果我扩展我的GUI,面板保持相同的大小。 我想修复标签面板的窄尺寸,我希望随着框架的增加,标签面板的尺寸也会增加。
感谢。
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();
}
}
答案 0 :(得分:0)
我有解决方案,
需要一个全局变量int index
,
在stateChanged方法中,index = e.getSource().getselectedIndex();
我在ArrayList(PanelList)中保存了每个Panel,
然后actionPerformed由任何按钮创建组件到选定的JTabbedPane,将是
PanelList.get(index).add(button);
它获取我选择的JTabbedPane并在其中添加Component。