Chcem to pridať do iného JPanelu, ale tam to nie je viditeľné. Môj ďalší Jpanel sa volá bottomPanel. PaintComponent sa má zobraziť v dolnom paneli
bottomPanel.setLayout(null);
TestPane tp = new TestPane();
bottomPanel.add(tp);
Rozšíril som Jpanel.
public class TestPane extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
int width = getWidth() - 100;
int height = getHeight() - 100;
int x = (getWidth() - width) / 2;
int y = (getHeight() - height) / 2;
g2d.setColor(Color.RED);
g2d.drawRect(x, y, width, height);
g2d.dispose();
}
}
odpovede:
3 pre odpoveď č. 1Problém začína:
bottomPanel.setLayout(null);
Java GUI musia pracovať na rôznych OS ", obrazovkaveľkosť, rozlíšenie obrazovky atď. pomocou rôznych PLAF v rôznych miestnych nastaveniach. Preto nepodporujú dokonalé rozloženie pixelov. Namiesto toho použite manažérov rozloženia alebo ich kombinácie spolu s výplňou rozloženia a okrajmi pre Biely vesmír.
A v budúcnosti namiesto MCVE pošlite viac ako 300 riadkov kódu s irelevantnými doplnkami, ako sú vstupno-výstupné súbory, tabuľky, triediče riadkov atď.
2 pre odpoveď č. 2
Pracuje pre mňa...
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
JPanel outer = new JPanel(new BorderLayout());
outer.add(new TestPane());
frame.add(outer);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
int width = getWidth() - 100;
int height = getHeight() - 100;
int x = (getWidth() - width) / 2;
int y = (getHeight() - height) / 2;
g2d.setColor(Color.RED);
g2d.drawRect(x, y, width, height);
g2d.dispose();
}
}
}
Zvážte poskytnutie a spustiteľný príklad čo demonštruje váš problém