私はjFrame(解像度:300x300)を持っており、楕円をたくさん表示したいと思っています。そのフィールド解像度は4000x4000でなければなりません。それ、どうやったら出来るの?楕円のフィールドの場合は、jComponentを作成して500楕円をすべて表示します。jFrameにたくさんのGraphics2Dを表示するには?
jComponentの一部だけ表示されることがわかります。jComponentのサイズを変更してすべての省略記号を表示する方法はありますか?
楕円/ 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);
}
}
}
の
http://i.stack.imgur.com/75QA9.png
その私の地域ANSこれはあなたが、JPanel
にこのJPanelプットをごJComponents
を入れて持っている私のGUI
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