J'ai ajouté un jfreechart code> à un
jPanel code> (à l'aide d'un
Borderlayout code>), et c'est énorme em>. Y a-t-il quelque chose que je peux faire pour le rendre plus petit?
4 Réponses :
Essayez de régler la taille du panneau votre graphique. p>
Vous pourriez avoir besoin de définir les deux JPANEL Middle et ChartPanel CP P>
Lorsque vous créez votre ChartPanel Code>
, vous avez plusieurs options qui affectent le résultat:
Accepter le Spécifiez la largeur préférée code> et invoquer remplacement Choisissez le Layout du conteneur à que le par défaut_width code> et
par défaut_height code>: 680 x 420. P> LI>
hauteur code> dans le constructeur. p> li>
setPreFerredSize () code> explicitement si approprié . p> li>
getPreFerredSize () code> pour calculer la taille de manière dynamique. P>
@Override
public Dimension getPreferredSize() {
// given some values of w & h
return new Dimension(w, h);
}
ChartPanel code> sera ajouté. Notez que la disposition par défaut de
jPanel code> est
flowlayout code>, tandis que celle de
jframe code> est
limaceLayout code>. Comme exemple concret,
thermomètredemo code>
utilise les deux valeurs préférées dans le constructeur et un gridlayout code> pour le conteneur permettant de redimensionner dynamique. p> li>
ol>
p> p>
Le cas échéant? D'après ce que je vois dans la réponse la plus avancée (et acceptée), il n'est jamais approprié;)
Ok, je vois ce que tu as fait ici. envisagez de relier votre réponse à votre réponse, pas à la question alors
Merci d'avoir lu et commenté. Si seulement c'était si simple! Je dirais que c'est occasionnellement i> approprié, comme suggéré ici et Here .
En plus de répondre "4" de @trashgod, j'ai eu le même problème et j'ai réussi à résoudre le problème comme ceci: (1) Créer une classe personnalisée qui s'étend jpanel (2) Obtenez la taille en quelque sorte, que vous voudriez passer à votre carte (3) Créer une méthode qui renvoie un objet "ChartPanel" comme celui-ci:
import java.awt.Dimension; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; public class MyPieChart extends JPanel { public static void main(String[] args) { example1(); example2(); example3(); } public static void example1() { JPanel panel = new JPanel(); panel.setBounds(50, 80, 100, 100); MyPieChart piePanel = new MyPieChart("Example 1", dataset(), panel); panel.add(piePanel); JFrame frame = new JFrame(); frame.setLayout(null); frame.setBounds(10, 10, 200, 300); frame.add(panel); frame.setVisible(true); } public static void example2() { MyPieChart piePanel = new MyPieChart("Example 2", dataset(), 30, 50, 100, 100); JFrame frame = new JFrame(); frame.setLayout(null); frame.setBounds(210, 10, 200, 300); frame.add(piePanel); frame.setVisible(true); } public static void example3() { MyPieChart piePanel = new MyPieChart("Example 3", dataset(), 100, 100); piePanel.setLocation(0,0); JFrame frame = new JFrame(); frame.setLayout(null); frame.setBounds(410, 10, 200, 300); frame.add(piePanel); frame.setVisible(true); } static ArrayList<ArrayList<String>> dataset() { ArrayList<ArrayList<String>> dataset = new ArrayList<ArrayList<String>>(); dataset.add(row( "Tom", "LoggedIn", "Spain" )); dataset.add(row( "Jerry", "LoggedOut", "England" )); dataset.add(row( "Gooffy", "LoggedOut", "France" )); return dataset; } static ArrayList<String> row(String name, String actualState, String country) { ArrayList<String> row = new ArrayList<String>(); row.add(name); row.add(actualState); row.add(country); return row; } ArrayList<ArrayList<String>> dataset; DefaultPieDataset pieDataset = new DefaultPieDataset(); int width, height, posX, posY; int colState = 1; String title; String LoggedIn = "LoggedIn"; String LoggedOut = "LoggedOut"; public MyPieChart(String title, ArrayList<ArrayList<String>> dataset, int...args) { if(args.length==2) { this.width = args[0]; this.height = args[1]; this.setSize(width, height); } else if(args.length==4) { this.posX = args[0]; this.posY = args[1]; this.width = args[2]; this.height = args[3]; this.setBounds(posX, posY, width, height); } else { System.err.println("Error: wrong number of size/position arguments"); return; } this.title = title; this.dataset = dataset; this.add(chart()); } public MyPieChart(String title, ArrayList<ArrayList<String>> dataset, JPanel panel) { this.title = title; this.dataset = dataset; this.width = panel.getWidth(); this.height = panel.getHeight(); this.setBounds(panel.getBounds()); this.add(chart()); } ChartPanel chart() { int totalLoggedIn = 0; int totalLoggedOut = 0; for(ArrayList<String> user : dataset) { if(user.get(colState).equals(LoggedIn)) totalLoggedIn++; else totalLoggedOut++; } pieDataset.clear(); pieDataset.setValue(LoggedIn +": "+ totalLoggedIn, totalLoggedIn); pieDataset.setValue(LoggedOut +": "+ totalLoggedOut, totalLoggedOut); JFreeChart chart = ChartFactory.createPieChart(title, pieDataset, false, false, false ); return new ChartPanel(chart) { // this is the trick to manage setting the size of a chart into a panel! public Dimension getPreferredSize() { return new Dimension(width, height); } }; } }