나는 jFrame (Resolution : 300x300)을 가지고 있고 그것에 많은 타원을 표시하고 싶다. 해당 필드 해상도는 4000x4000이어야합니다. 어떻게해야합니까? 타원의 필드에 대해 jComponent가 500 개의 타원을 모두 표시하도록 만들었습니다.jFrame에서 Graphics2D를 많이 표시하는 방법은 무엇입니까?
jComponent의 일부만 displayd 표시되는 것을 볼 수 있습니다. jComponent의 크기를 조정하여 모든 타원을 표시하는 방법은 무엇입니까?
http://i.stack.imgur.com/75QA9.png
그 타원의 내 영역/JComponent의
package home;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JComponent;
public class Karte extends JComponent {
private static final long serialVersionUID = 1L;
int AMOUNT= 500;
public ArrayList<Ellipse2D> Kreise = new ArrayList<Ellipse2D>();
public Karte() {
createCircles(AMOUNT);
}
private void createCircles(int AMOUNT) {
Random r = new Random();
for (int i = 1; i <= AMOUNT; i++) {
Kreise.add(new Ellipse2D.Double(r.nextInt(4000), r.nextInt(4000), 4, 4));
}
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D kreis = (Graphics2D) g;
for (Ellipse2D t : Kreise) {
kreis.setColor(Color.BLACK);
kreis.draw(t);
}
}
}
는 ANS이 내 GUI
당신은 당신의JComponents
JPanel
에 넣어야 할
package home;
import java.awt.Dimension;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
public class NewJFrame extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
public NewJFrame() {
initComponents();
}
private void initComponents() {
jLayeredPane1 = new javax.swing.JLayeredPane();
karte1 = new home.Karte();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout karte1Layout = new javax.swing.GroupLayout(karte1);
karte1.setLayout(karte1Layout);
karte1Layout.setHorizontalGroup(karte1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER).addGap(0, 4000, Short.MAX_VALUE));
karte1Layout.setVerticalGroup(karte1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER).addGap(0, 4000, Short.MAX_VALUE));
karte1.setBounds(0, 0, 4000, 4000);
karte1.setMinimumSize(new Dimension(300, 300));
jLayeredPane1.add(karte1, javax.swing.JLayeredPane.DEFAULT_LAYER);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 300,
Short.MAX_VALUE));
layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 300,
Short.MAX_VALUE));
pack();
}
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Windows".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
private javax.swing.JLayeredPane jLayeredPane1;
private home.Karte karte1;
}
1) 인간의 눈은 4000 x 4000을 분석 할 수 없습니다. 2) 데이터 (모델)는 GUI (뷰)와 분리되어 있어야합니다. 따라서 데이터를 스케일링하여 (스케일 팩터로 곱한) 데이터를 변환하고이를 표시하기 전에 변환 (변환 계수 추가) 할 수 있습니다. –
표시 할 이미지를 만들고 구성 요소의 크기에 맞게 크기를 조정 한 다음 구성 요소에 이미지를 페인트합니다. – Paul