我正在使用JPanel(更改其组件),但我想从外部JFrame更改它。
对不起,我用Netbeans制作了这段代码(我知道它放了一些不需要的东西来回答这个问题),并尝试清理编辑它,因为真正的代码它更大
这里是JPanel的代码,名称为'myPanel'。
public class MyPanel extends javax.swing.JPanel {
private javax.swing.JButton filling = new javax.swing.JButton();
private javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
private javax.swing.JTable myTable = new javax.swing.JTable();
private final javax.swing.table.DefaultTableModel INITIAL_TABLE_MODEL = new javax.swing.table.DefaultTableModel(
new Object[][]{},
new String[]{"Text", "Integer"}
);
public MyPanel() {
initComponents();
//callFilling(); // INNER CALL!
}
private void initComponents() {
filling.setText("filling");
filling.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
fillingActionPerformed(evt);
}
});
myTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] { },
new String [] { "Text", "Integer" }
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Integer.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
jScrollPane1.setViewportView(myTable);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(filling)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(filling)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE))
);
}
public void callFilling() {
myTable.setModel(INITIAL_TABLE_MODEL);
INITIAL_TABLE_MODEL.setRowCount(0);
((javax.swing.table.DefaultTableModel) myTable.getModel()).setRowCount(0);
Integer numberRows = new java.util.Random().nextInt((10 - 2) + 1) + 2;
for (int i = 0; i < numberRows; i++) {
Integer number = new java.util.Random().nextInt();
((javax.swing.table.DefaultTableModel) myTable.getModel()).addRow(
new Object[]{
number.toString(), number
});
}
this.revalidate();
this.repaint();
}
private void fillingActionPerformed(java.awt.event.ActionEvent evt) {
callFilling();
}
}
框架!!!
public class MainFrame extends javax.swing.JFrame {
private javax.swing.JTabbedPane myTabbed = new javax.swing.JTabbedPane();
public MainFrame() {
initComponents();
MyPanel myPanel = addNewTab();
myPanel.callFilling(); //OUTER CALL!
myPanel.revalidate();
myPanel.repaint();
addNewTab();
}
private MyPanel addNewTab() {
int idx = myTabbed.getTabCount();
String title = "myTabbed: " + idx + " ";
MyPanel myPanel = new MyPanel();
myTabbed.insertTab(title, null, new MyPanel(), null, idx);
return myPanel;
}
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(myTabbed, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(myTabbed, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(() -> {
new MainFrame().setVisible(true);
});
}
}
当callfilling();
是从JPanel(review INNER CALL)执行时,它可以工作!但是从JFrame(review//outer CALL)执行不工作!
回顾这个问题,更新JPanel在一个框架上的内容,在另一个框架上单击按钮,建议revalidate();repaint();
我使用的代码,但不起作用。
怎么解决这个?
MyPanel myPanel = addNewTab();
myPanel.callFilling(); //OUTER CALL!
myPanel.revalidate();
myPanel.repaint();
addNewTab();
不确定你想做什么。
创建一个MyPanel对象,并对其调用callFilling()来设置TableModel中的值。但您从未将面板添加到框架中。
在向可见面板添加组件时,只需要调用revalidate()和repaint()。
然后调用addNewTab()
,它执行以下操作:
MyPanel myPanel = new MyPanel();
myTabbed.insertTab(title, null, new MyPanel(), null, idx);
return myPanel;
同样,创建2个MyPanel对象没有任何意义。将一个对象添加到选项卡式窗格中,但随后返回第二个MyPanel对象。
我真的不确定你想做什么。我不知道您是想在框架中添加面板,还是在选项卡式窗格中添加面板,所以我不能真正提出一个具体的建议。
在任何情况下,都需要对代码进行结构化,以便只创建on MyObject对象,并且需要将该面板添加到选项卡式窗格或框架中,但不能同时添加到两者中。
问题内容: 我正在使用JPanel(更改其组件),但是我想从External JFrame进行更改。 抱歉,我使用Netbeans编写了这段代码(我知道它放了一些该问题不需要的东西),并尝试对其进行干净的编辑,因为它的实际代码更大 这是JPanel的代码,名称为“ MyPanel”。 框架!!! 当执行该操作时,JPanel( 审核INNER CALL )起作用!但是JFrame( 审核// OU
我有一个带有卡布局组件的JFrame。我正在使用卡布局在应用程序执行的不同时刻在不同的JPanel之间切换。在某些时候,我正在使用摇摆工人对象来生成一些XML文件。在这段时间里,我想在我的窗口中显示另一个JPanel,告诉用户等待。在这个JPanel上,我想在3个标签之间切换。 吉列布尔1会说:“请稍候。 吉拉贝尔2会说:“请稍候..” 吉拉贝尔3会是:“请稍候...” 现在代码如下: Swing
我的JPanel类中有数据库JTable,我想在我的JFRame类中使用它 我希望通过单击一些按钮来自动更新JTable 这并不是错误,但它不希望自动更新,除非我将Jframe放在Jpanel类上,这将生成一个新的帧 这是我的JPanel 这是我的JFrame类中的内容 我已经在JPanel上放置了 repaint()和revalidate(),但它不起作用
编辑:当我拖动边框时,某种刷新被发送,我需要弄清楚并手动发送相同的刷新。 请注意,我已经尝试使用revalidate()和repaint()。 当使用JFrame和JPanel来显示一个框架时,我试图使框架的大小易于改变。 null 此外,一个重要的注意事项是,当您拖动边框时,白条会消失,并正确地重新加载/刷新内容(即使您只是少量拖动)
我最近从我的windows机器换成了iMac,我把我的angular项目复制到Mac上,并按照所有的安装说明操作,但现在当我键入NPM start时,项目开始了,但当我保存文件时并没有更新。 我已经卸载了angular-cli并将其安装到最新版本 角度-CLI:1 . 0 . 0-β21 节点:6.9.1 操作系统:达尔文x64 我也安装了守夜人,但没有成功。 我杀ng服的时候,网站直接给出错误
我试图在JFrame中更改JPanel的背景。JFrame由JPanels组成,很像一个网格。我试图改变JFrame中的一个随机JPanel,并查看循环中每一次的颜色变化。 如果取消对panel.add(individualPanel)行的注释,这将显示颜色变化,但它会不断向JFrame添加越来越多的JPanels。但是,注释这一行可以让我更改颜色,但不会显示JFrame中的任何更改。我试着修改了