我写了一个代码,下面给出。在这里,我有一个选项卡式面板,我在其中添加了更多带有"+"(添加选项卡符号)的选项卡,例如框架右侧的 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();
}
}
布局需要更正(图片)
目标操作(图片)
我已经有了解决方案,需要一个全局变量,int index
,在状态更改的方法中,index = e.getSource().getselectedIndex();
我将每个面板保存在数组列表(面板列表)中,然后 action由任何按钮执行以创建组件到该选定的 JTabbedPane,将是
PanelList.get(index).add(button);
它获取我选择并在其中添加组件的 JTabbedPane。