Probleme bei Verwendung von Swing-Komponenten

Status
Nicht offen für weitere Antworten.

Han

Bekanntes Mitglied
Hallo....ich weiß nicht genau wie ich mein Problem nennen soll. ( :roll: newbie in Swing). Mir geht es hierbei nicht um den Code sondern nur um die Oberfläche also die Angabe des Bsp. braucht ihr euch gar ned durchlesen.
Also: Ich werke gerade an einem Programm dessen Oberfläche so ausschauen soll.
http://www.ssw.uni-linz.ac.at/Teaching/Lectures/SW2/2006/Uebung09.pdf

Nun habe ich prinzipiell keine Schwierigkeiten mit der Oberfläche nur mit dem Panel Bar-Chart und Pie-Chart habe ich meine Schwierigkeiten und zwar mit dem Panel-Titel "Bar-Chart" und "Pie-Chart".

Das Balken- sowie Kreisdiagramm sind ja abgeleitete Klassen von JComponent. Nun habe ich das so implementiert:

Code:
frame = new JFrame("NumVis");
.....

//barChartPanel und pieChartPanel abgeleitete Klassen von JComponent...

barChartPanel = new BarChart(numberList);
pieChartPanel = new PieChart(numberList);

.....

frame.getContentPane().setLayout(new GridLayout(1, 3));
		
frame.getContentPane().add(barChartPanel);
barChartPanel.setBorder(new TitledBorder("Bar-Chart"));
frame.getContentPane().add(pieChartPanel);
pieChartPanel.setBorder(new TitledBorder("Pie-Chart"));
........

Das Problem ist jetzt nur dass er mir den Title nie anzeigt.....warum?
Ich hab auch schon versucht das barChartPanel wiederum in ein eigenes JPanel hinzuzufügen....leider ohne Erfolg....dann zeigts mir nur mehr den Titel dafür nicht das Balken- sowie Kreisdiagramm an :? ......wie erreiche ich also den Panel-Titel "Bar-Chart" bzw "Pie-Chart"?

mfg,
Hannes
 

Han

Bekanntes Mitglied
Hmmm....danke für die Antwort aber rühren tut sich auch nichts....wobei setzen tuts mir den Border schon aber halt anzeigen nicht....das ist komisch.....

mfg,
Hannes
 

L-ectron-X

Gesperrter Benutzer
Kein Wunder, das von lin Vorgeschlagene ist auch nichts anderes, als deine Lösung.
Zeig doch mal den Code der Klasse.
 

Han

Bekanntes Mitglied
Ok.....hier ist der Code der Klasse BarChart: (BarChart barChartPanel)

Code:
package swingui;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Insets;
import java.util.Random;

import javax.swing.JComponent;
import java.util.ArrayList;
import java.util.List;

import NumberList.ListChangeListener;
import NumberList.NumberList;


public class BarChart extends JComponent{
	
	private NumberList numList;
	
	private List<Color> colorList;
	
	private int stdFontSize;
	
	private RandomColor rColor;
	
	private ListChangeListener listChangeListener = new ListChangeListener() {
		public void listChanged() {
			repaint();
		}
	};
	
    public BarChart(NumberList numList){
    	this.numList = numList;
    	
    	numList.addListChangeListener(listChangeListener);
    	rColor = new RandomColor();
    	stdFontSize = 1;
	}
	
	
    public void paint(Graphics g) {
        
    	Insets insets = getInsets();
    	int currentWidth = getWidth() - insets.left - insets.right;
    	int currentHeight = getHeight() - insets.top - insets.bottom;
    	
        int StWidth = 40;
        
        int x = 0;
        
        float StdFSize = 12F;
        
        if (numList.getSize() == 0) {
        	
			g.drawString("Type in numbers for visualization", 10, 20);
		} else {
			int number;
			
			while(biggerThanCurrentWidth(StWidth)){
				g.setFont(g.getFont().deriveFont(StdFSize));
				StWidth--;
			}
			
			double biggestNumber = getBiggestNumber(numList);
			double onePercent = biggestNumber/100;
			colorList = rColor.genRColor(numList.getSize());
			Color color;
			
			for (int i = 0; i < numList.getSize(); i++) {
				number = numList.getNumber(i);
				double b = number/onePercent;
				g.setColor(Color.BLACK);
				g.drawString("-"+number+"-", x, getHeight()-10);
				int height = (int) b*2;
				
				color = colorList.get(i);
				g.setColor(color);
				
				g.fillRect(x, currentHeight-height, StWidth, height);
				x = x + StWidth + 2;
			}	
		}   
    }
    
    public int getBiggestNumber(NumberList numList){
    	
    	int biggestNumber = 0;
    	int temp;
    	for(int i = 0; i < numList.getSize(); i++) {
    		 temp = numList.getNumber(i);
    		 if(temp > biggestNumber){
    			 biggestNumber = temp;
    		 }
    	}
    	return biggestNumber;
    }
    
    public boolean biggerThanCurrentWidth(int StWidth){
    	int totalWidth = 0;
    	Insets insets = getInsets();
//    	probiere obs sichs ausgehen könnte....
		for (int i = 0; i < numList.getSize(); i++) {
			totalWidth = totalWidth + StWidth + 2;
		}
		if(totalWidth > (getWidth() - insets.left - insets.right)){
			return true;
		}
    	return false;
    }

}

mfg,
Hannes
 

Han

Bekanntes Mitglied
Ja wieder das gleiche Problem...der Border wird gesetzt aber den Titel zeigts mir ned an. Vielleicht geht das generell nicht wenns nicht vom Typ JPanel stammt? Aber dann wäre es unlogisch dass man die Methode auswählen könnte...

mfg,
Hannes
 

Han

Bekanntes Mitglied
Also ich habs einfach so gmacht dass ich im Knstruktor das eingegeben habe:
...
this.setBorder(new TitledBorder("Bar-Chart"));
....


Die andere, gleiche Möglichkeit funktioniert auch nicht....

mfg,
Hannes
 

Han

Bekanntes Mitglied
Hier mein Code der das Frame erzeugt und die Komponenten hinzufügt...vielleicht hab ich im Frame irgendwas verstellt....ich kapier das einfach nicht.....


Code:
public void start() {
		// Create the data model.
		numberList = new NumberList();

		// Create the swing components.
		frame = new JFrame("NumVis");
		
		barChartPanel = new BarChart(numberList);
		pieChartPanel = new PieChart(numberList);
		
		inputPanel = new JPanel();
		
		inputNorthPanel = new JPanel();
		inputNorthButPanel = new JPanel();
		inputSouthPanel = new JPanel();
		
		addButton = new JButton("add");
		removeButton = new JButton("remove");
		upButton = new JButton("up");
		downButton = new JButton("down");

		numList = new JList(new NumberListModel(numberList));
		numList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		clearButton = new JButton("clear");
		loadButton = new JButton("load");
		saveButton = new JButton("save");

		inNumberField = new JFormattedTextField();
		
		// Build layout.
		frame.getContentPane().setLayout(new GridLayout(1, 3));
		
		frame.getContentPane().add(barChartPanel);
		
		frame.getContentPane().add(pieChartPanel);
		pieChartPanel.setBorder(new TitledBorder("Pie-Chart"));
		frame.getContentPane().add(inputPanel);
		
		inputNorthButPanel.setLayout(new FlowLayout());
		
		inputNorthButPanel.add(addButton);
		inputNorthButPanel.add(removeButton);
		inputNorthButPanel.add(upButton);
		inputNorthButPanel.add(downButton);
		
		inputNorthPanel.setLayout(new GridLayout(2,1));
		inputNorthPanel.add(inputNorthButPanel);
		inputNorthPanel.add(inNumberField);
				
		inputSouthPanel.setLayout(new FlowLayout());
		inputSouthPanel.add(clearButton);
		inputSouthPanel.add(loadButton);
		inputSouthPanel.add(saveButton);
		
		inputPanel.setLayout(new BorderLayout());
		
		inputPanel.add(inputNorthPanel,BorderLayout.NORTH);
		inputPanel.add(new JScrollPane(numList),BorderLayout.CENTER);
		inputPanel.add(inputSouthPanel,BorderLayout.SOUTH);
		inputPanel.setBorder(new TitledBorder("input data"));
			
		//Register listeners
	    addButton.addActionListener(addButtonListener);
	    removeButton.addActionListener(removeButtonListener);
	    clearButton.addActionListener(clearButtonListener);
	    upButton.addActionListener(upButtonListener);
	    downButton.addActionListener(downButtonListener);
		loadButton.addActionListener(loadButtonListener);
	    saveButton.addActionListener(saveButtonListener);
		
		// Set EXIT_ON_CLOSE flag so that the application is terminated when the
		// main window is closed.
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		// Show window.
		frame.setSize(900, 300);
		frame.setVisible(true);
	}

mfg,
Hannes
 
B

Beni

Gast
Wenn du "paint" überschreibst, dann zeichnet dein Code die Componente, aber dein Code zeichnet ja niemals den Border...

Als erstes solltest du "paintComponent" und nicht "paint" überschreiben.
Und dann solltest du nur in dem Bereich zeichnen, welcher durch die Insets ("getInsets()") beschränkt ist.

Vielleicht ist es auch einfacher für dich, deine Componente auf eine andere zu setzen, und die andere den Border zeichnen lassen.
 

Han

Bekanntes Mitglied
Hallo....mit PaintComponent funktionierts..super..danke.....
Wie setzt man eine Komponente auf eine andere? Das hab ich mir auch schon gedacht aber bei mir hats nicht geklappt. Ich habs so versucht. Was mach ich falsch dabei?

Code:
.....
JPanel a = new JPanel();
a.setLayout(new FlowLayout());

a.add(barChartPanel);
.....

Was mache ich falsch?

mfg,
Hannes
 

L-ectron-X

Gesperrter Benutzer
Das FlowLayout ist schon das StandardLayout bei einem JPanel, es braucht also nicht extra gesetzt zu werden.
Außerdem scheint es hier nicht das richtige Layout zu sein. Damit sich die einzusetzende Komponente über die gesamte Größe ersteckt, benutzt du mal das BorderLayout.

Versuche es mal mit:
Code:
JPanel a = new JPanel(new BorderLayout()); 
a.add(barChartPanel);
 

Han

Bekanntes Mitglied
Hallo...nein...dann gehts trotzdem nicht...aber danke für deine Antwort....

mfg,
Hannes
 

L-ectron-X

Gesperrter Benutzer
Han hat gesagt.:
Hallo...nein...dann gehts trotzdem nicht...aber danke für deine Antwort....

mfg,
Hannes
Mit dieser Antwort kann keine weitere Fehlersuche erfolgen.
Was geht nicht? Gibts Fehlermeldungen? Poste doch mal ein Bild des Momentanzustands.
 

Han

Bekanntes Mitglied
Nein geht eh...entschuldige für den Mehraufwand....dürfte mich bloß vertippselt haben beim ersten Versuch...sorry....

Warum gehts jetzt eigentlich mit dem BorderLayout? Was kann das besser als das normale FlowLayout?

....nun hab ich aber wieder ein anderes Problem....ich will den Hintergrund des barChartPanel auf weiß umändern.




Wenn ich den Hintergrund jetzt ganz normal im Konstruktor der Klasse ändere tut sich ncihts...also:
Code:
......
public BarChart(NumberList numList){
    	this.numList = numList;
    	
    	this.setBackground(Color.WHITE);
    	
    	numList.addListChangeListener(listChangeListener);
    	rColor = new RandomColor();
    	stdFontSize = 1;
	}
.....

Was mach ich falsch bzw is sicher wieder die paintComponent(Graphics g) Methode schuld oder?

mfg,
Hannes
 

André Uhres

Top Contributor
Versuch's mal mit paint(..), darin rufst du aber als erste Anweisung (!) super.paint(g) auf..
paint(..) ist nämlich u.a. auch für Rand und Hintergrund zuständig.

PS: wenn's nicht geht, dann setz den barchart einfach in einen panel mit background.
JComponent ist nämlich von Haus aus durchsichtig.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Probleme bei der Verwendung vom JProgressMonitor AWT, Swing, JavaFX & SWT 3
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
K 2D-Grafik .GIF macht mir Probleme AWT, Swing, JavaFX & SWT 14
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
T JTable Graphik probleme AWT, Swing, JavaFX & SWT 3
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
P Probleme mit setIconImage AWT, Swing, JavaFX & SWT 8
U Swing Probleme mit Asynchronen Prozessen und Swing: AWT, Swing, JavaFX & SWT 3
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
L Probleme mit JPanel AWT, Swing, JavaFX & SWT 8
D Probleme bei Übertrag von ArrayList in Jtable AWT, Swing, JavaFX & SWT 2
G kleinere Probleme mit GUI AWT, Swing, JavaFX & SWT 2
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
M Swing Erste Schritte mit der GUI, viele Probleme AWT, Swing, JavaFX & SWT 36
J GUI-Aktualisierungs-Probleme AWT, Swing, JavaFX & SWT 4
B Performance-Probleme AWT, Swing, JavaFX & SWT 17

Ähnliche Java Themen

Neue Themen


Oben